package viewInterfaces;

import java.util.List;

import javax.swing.JPanel;

import pluginInterfaces.IRecommender;
import utils.weka.view.GenericObjectEditor;
import view.ViewDBConnectionSetup;
import controller.ControllerRecommendersPanel;
import controllerInterfaces.IControllerRecommendersPanel;

/**
*
* Interface of {@link ViewDBConnectionSetup} controller class according to Abstract Factory design pattern.
*/
public interface IViewRecommendersPanel extends IViewPanel {

	/**
	 * Set the MVC++ Controller Class for this View.</br>
	 * ControllerRecommendersPanel is manipulable through {@link IControllerRecommendersPanel} interface
	 * @param	myController	MVC++ Controller
	 * @see	ControllerRecommendersPanel
	 * @see IControllerRecommendersPanel
	 */	
	public void SetController(IControllerRecommendersPanel myController);
	

	/**
	 * Get panel of metrics configurations
	 * @return	JPanel
	 */		
	public JPanel GetPanel();
	
	
	/**
	 * Show recommender setup dialog
	 * @param goe	generic object editor 
	 */
	public void renderDialogSetup(GenericObjectEditor goe);
	
	
	/**
	 * Enables or disables all component of this panel, depending on the value of the parameter value.</br> 
	 * @param value	- If true, this component is enabled; otherwise this component is disabled  
	 */		
	public void setEnabledAll(boolean value);
	
	
	/**
	 * Set the list of recommendation algorithms configurations in current JList</br>
	 * Each of the set {@link Recommender} is manipulable through its {@link IRecommender} interface.
	 * @param	recommenderList	list of {@link Recommender}
	 * @see 	IRecommender
	 * @see		Recommender
	 */		
	public void setRecommenderList(List<IRecommender> recommenderList);
	
	
	/**
	 * Get all recommendation algorithms configurations of current JList as generic object</br>
	 * @return	recommendation algorithms configurations 
	 */	
	public List<Object> getRecommenderList();
	
	
	/**
	 * Start process for add a new recommender setup.
	 */
	public void StartToAddRecommenderSetup();
	

	/**
	 * Start process for edit a existing recommender setup.
	 * @param index index of recommender setup to edit
	 */
	public void StartToEditRecommenderSetup(int index);
	
	
	/**
	 * Start process for remove a existing recommender setup.
	 * @param index index of recommender setup to remove
	 */
	public void StartToRemoveRecommenderSetup(int index);

	
	/**
	 * Start process for copy a existing recommender setup.
	 * @param index index of recommender setup to copy
	 */
	public void StartToCopyRecommenderSetup(int index);

}
